Русификация ЖКИ-панелей серии LCD фирмы Octagon Systems
Лариса Капитанова
СТА 3/2000
Жидкокристаллические индикаторные панели серии LCD фирмы Octagon Systems предназначены для создания операторских консолей с малым энергопотреблением. ЖКИ-панели имеют высокую контрастность и оснащены подсветкой на базе светодиодного индикатора с возможностью регулировки яркости. Встроенный контроллер LCD-II (HD44780) позволяет отображать буквенно-цифровые символы и знаки пунктуации. ЖКИ-панель подключается к микрокомпьютеру через параллельный порт или плату ввода-вывода.
Основные свойства:
- интерфейс по 4- или 8-битовой линии данных;
- ОЗУ данных дисплея объемом 80·8 бит (максимум 80 символов);
- ПЗУ знакогенератора:
символы 5 ·7 точек – 160 символов,
символы 5 ·10 точек – 32 символа;
- ОЗУ знакогенератора:
символы 5 ·7 точек – 8 символов или
символы 5 ·10 точек – 4 символа;
- можно считывать данные с дисплея и из ОЗУ знакогенератора;
-
широкий диапазон инструкций:
очистка дисплея, возврат курсора в начало, включение-отключение дисплея, включение-отключение курсора, прерывистое свечение символов дисплея, сдвиг курсора, сдвиг дисплея;
- внутренний автоматический сброс при включении питания.
В ПЗУ знакогенератора контроллера LCD-II записаны шаблоны букв английского алфавита и японских иероглифов, поэтому возникает проблема при выводе символов кириллицы. Решить ее можно программным путем.
Идея заключается в следующем: многие буквы русского алфавита совпадают по написанию с английскими, а для вывода на дисплей остальных букв можно использовать 8 перепрограммируемых символов, шаблоны которых загружаются в ОЗУ знакогенератора (далее — ЗГ).
Реально получается:
- буквы «A», «B», «E», «K», «M», «H», «O», «P», «C», «T», «X» есть в английском алфавите;
- буква «З» похожа по написанию на цифру «3»;
- буква «Ь» – на строчную букву «b»;
- букву «Ы» можно составить из двух символов;
- букву «Ъ» можно заменить символом « ' » (апостроф).
Таким образом, остается 17 букв, не считая «Ё». Из них к 8 можно подобрать символы из ПЗУ ЗГ, которые отдаленно напоминают русские буквы и в контексте могут быть понятны. Шаблоны букв «Б», «Г», «Д», «Ж», «И» («Й»), «Л», «П», «Я» необходимо записать в ОЗУ ЗГ с кодами 0 – 7. Такое решение проблемы представляется наиболее простым. Однако текст, составленный из таких букв, без «Ё» и «Й» выглядит не только неэстетично, но и читается с трудом.
Более красиво выглядит решение, когда шаблоны недостающих символов загружаются в знакогенератор динамически, по мере необходимости. После инициализации дисплея в ОЗУ ЗГ загружаются шаблоны букв, не имеющих эквивалента в ПЗУ ЗГ. При выводе очередного символа на дисплей выполняется функция перекодировки ASCII-кода в код дисплея. Примерный алгоритм функции приведен на рис. 1.
Условные обозначения: А — отображаемый символ; В — элемент множества символов, загружаемых в ОЗУ знакогенератора
Рис. 1. Алгоритм функции динамической перекодировки русских символов в коды дисплея
Данная функция успешно выполняет вывод русских букв в том случае, если одновременно на дисплее присутствует не более 8 различных перепрограммируемых символов. Если таких символов больше, для остальных будут выведены подобранные заменяющие их символы из ПЗУ ЗГ. При необходимости можно изменить выводимый текст так, чтобы избежать подобных ситуаций.
На дискете, содержащей программное обеспечение контроллера MicroPC фирмы Octagon Systems, приведена резидентная программа для сканирования клавиатуры и управления дисплеем. Исходный текст программы содержит все функции, необходимые для инициализации дисплея, вывода символов на дисплей и загрузки шаблона символа по нулевому адресу в ОЗУ ЗГ (код символа - 0). Полный набор команд контроллера HD44780 приведен в документации на данный контроллер.
Далее описаны команды загрузки шаблонов символов в ОЗУ ЗГ и приведены тексты функций на языке С.
Для загрузки шаблона символа необходимо сначала установить адрес записи в ОЗУ ЗГ. Команда установки адреса имеет вид:
RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 1 A A A A A A
Здесь RS – регистр выбора сигнала, DBi – линии передачи данных, AAAAAA – адрес записи в ОЗУ ЗГ.
Далее следует записать шаблон символа. Для символа размером 5-7 точек он состоит из 7 байтов, 8-й байт – нулевой (позиция курсора).
Команда записи в ОЗУ ЗГ совпадает с командой записи в ОЗУ данных:
RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
1 D D D D D D D D
Здесь DDDDDDDD – байт данных. После записи байта адрес автоматически увеличивается на 1.
В таблице 1 приведено соответствие между кодом символа в ОЗУ данных, адресом шаблона в ОЗУ ЗГ и шаблоном символа (для символов 5 ·7 точек).
Таблица 1. Соответствие между кодом символа в ОЗУ данных, адресом шаблона в ОЗУ ЗГ и шаблоном символа
Функции загрузки шаблона символа в ОЗУ ЗГ и записи байта в ОЗУ данных или ОЗУ ЗГ приведены в листинге. Вывод данных осуществляется по 4-битовой линии.
Функцию lcdout и все другие необходимые функции можно взять в исходном тексте программы управления дисплеем, приведенном на дискете ПО MicroPC. Добавление функции динамической перекодировки букв русского алфавита в текст резидентной программы управления дисплеем позволяет русифицировать ЖКИ-панели серии LCD.
Предприятие «Гражданская защита» использует в своих разработках программно-аппаратные комплексы на базе контроллеров серии MicroPC фирмы Octagon Systems со встроенной системой реального времени QNX, эффективно работающие в системах контроля и управления технологическими процессами. Описанный подход позволил создать для них операторские консоли с понятным и удобным интерфейсом.
/*******************************************
загрузка шаблона символа в знакогенератор
cg_kod ' код символа от 0 до 7
buf ' адрес буфера из 7 байтов,
описывающих шаблон символа сверху вниз
*******************************************/
void define_char( char cg_kod, char *buf )
{
int i;
//установка адреса в знакогенераторе
lcdout( ( cg_kod >> 1 ) | 4 );
lcdout( ( cg_kod & 1 ) << 3 );
//запись шаблона
for( i = 0; i < 7; i++ )
out_char_lcd( *buf++ );
out_char_lcd(0);
}
/*******************************************
вывод символа на LCD'дисплей или в ОЗУ ЗГ
ch ' символ
*******************************************/
out_char_lcd( char ch )
{
lcdout(((ch & 0xf0) >> 4) | 0x10); //старшая тетрада
lcdout((ch & 0x0f) | 0x10); //младшая тетрада
}
Л. Капитанова — сотрудник ООО «СП Гражданская защита»
Телефон: (35135) 2-8629
Дата: 20.07.2007
Ссылка: http://www.cta.ru
Файл: CyrilicLCD.pdf, 91.23 Кб
|